#ifndef __LIB_GUI_COLOR_H
#define __LIB_GUI_COLOR_H

#include<stdint.h>

typedef struct 
{
    uint8_t blue;
    uint8_t green;
    uint8_t red;
    uint8_t alpha;
}gui_argb_t;

#define _GUI_ARGB(a,r,g,b) (uint32_t)(((uint32_t)(a)<<24)|((uint32_t)(r)<<16)|((uint32_t)(g)<<8)|(uint32_t)(b))
#define GUI_ARGB(a,r,g,b) _GUI_ARGB((a)&0xff,(r)&0xff,(g)&0xff,(b)&0xff)
#define GUI_RGB(r,g,b) GUI_ARGB(255,r,g,b)
#define GUI_RGB_A(color) (((uint32_t)(color)>>24)&0xff)
#define GUI_RGB_R(color) (((uint32_t)(color)>>16)&0xff)
#define GUI_RGB_G(color) (((uint32_t)(color)>>8)&0xff)
#define GUI_RGB_B(color) (((uint32_t)(color)&0xff))


#define GUI_RGB_SUB(color,r,g,b) \
    GUI_ARGB(GUI_RGB_A(color),GUI_RGB_R(color)-(r),GUI_RGB_G(color)-(g),GUI_RGB_B(color)-(b))
#define GUI_RGB_ADD(color,r,g,b) \
    GUI_ARGB(GUI_RGB_A(color),GUI_RGB_R(color)+(r),GUI_RGB_G(color)+(g),GUI_RGB_B(color)+(b))
#define GUI_ARGB_SUB(color,a,r,g,b) \
    GUI_ARGB(GUI_RGB_A(color)-(a),GUI_RGB_R(color)-(r),GUI_RGB_G(color)-(g),GUI_RGB_B(color)-(b))
#define GUI_ARGB_ADD(color,a,r,g,b) \
    GUI_ARGB(GUI_RGB_A(color)+(a),GUI_RGB_G(color)+(r),GUI_RGB_G(color)+(g),GUI_RGB_B(color)+(b))

//common  color 
#define GUI_RED GUI_RGB(255,0,0)
#define GUI_GREEN GUI_RGB(0,255,0)
#define GUI_BLUE GUI_RGB(0,0,255)
#define GUI_WHITE GUI_RGB(255,255,255)
#define GUI_BLACK GUI_RGB(0,0,0)
#define GUI_GRAY GUI_RGB(195,195,195)
#define GUI_LEAD GUI_RGB(127,127,127)
#define GUI_YELLOW GUI_RGB(255,255,0)
#define GUI_COLOR_NONE GUI_ARGB(0,0,0,0)

#endif 